Many data centers (both enterprise data centers and service provider data centers) are adopting cloud-based infrastructures. In such data centers, a large number of computers connect through a network to provide distributed computing services. One of the primary requirements of a cloud-based computing platform (both public and private) is agility and flexibility to place and move any infrastructure element to anywhere else in the infrastructure.
In a data center environment, it is often necessary to migrate an application from one device to another or otherwise shut down one application and start a new instance. For example, it is sometimes difficult to know resource requirements (e.g., bandwidth, memory, etc.) of applications prior to deployment. A device on which multiple applications are installed may run out of capacity. At this point, the system and/or its administrator would need to migrate a certain application to a different device that has extra capacity. As another example, during operation, applications may need to be migrated among different devices so that resources are more evenly distributed to service the applications. As yet another example, whenever a new version of an application needs to be installed on the devices, the old version is shutdown. When an existing application migrates from one device to another or an old version is shut down, existing flows with clients are typically interrupted. To minimize the impact of the migration, the process should be transparent to the application and its clients. In other words, the application and the clients serviced by the application should be uninterrupted during the migration. Most data centers today are unable to support such uninterrupted migration.